package ca.etsmtl.log720.lab1;

import java.io.*;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;

public class ClientBureau {
	
	private static BanqueDossiers _banqueDossiers;
	private static BanqueInfractions _banqueInfractions;
	
	public static void main(String[] args) {
		try {
			org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);

			// get hold of the naming service
			NamingContextExt nc = NamingContextExtHelper.narrow(orb
					.resolve_initial_references("NameService"));

			NameComponent[] name_banqueDossiers = new NameComponent[] { new NameComponent(
					"BanqueDossiers", "service") };
			NameComponent[] name_banqueInfractions = new NameComponent[] { new NameComponent(
					"BanqueInfractions", "service") };

			// resolve name to get a reference to our server
			_banqueDossiers = BanqueDossiersHelper
					.narrow(nc.resolve(name_banqueDossiers));
			_banqueInfractions = BanqueInfractionsHelper
					.narrow(nc.resolve(name_banqueInfractions));

		} catch (Exception e) {
			e.printStackTrace();
		}
		
		boolean continuer = true;
		
		while(continuer) {
		
			System.out.println("\n\nMenu du client du poste de police. Choisissez parmi les options disponibles :");
			System.out.println("1. Ajout d'un dossier a la banque de dossiers.");
			System.out.println("2. Ajout d'une infraction dans la banque d'infractions.");
			System.out.println("3. Afficher la liste des dossiers compris dans la banque de dossiers");
			System.out.println("4. Afficher la liste des dossiers compris dans la banque d'infractions");
			System.out.println("5. Quitter");
			
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			int choice = 0;
			try {
				choice = Integer.parseInt(br.readLine());
			} catch (IOException err) {
				System.out.println("Error reading line");
			}
			
			switch (choice) {
				case 1 : ajouterDossiers();
					break;
				case 2 : ajouterInfractions();
					break;
				case 3 : visualiserDossiers();
					break;
				case 4 : visualiserInfractions();
					break;
				case 5 : continuer = false;
				System.out.println("\n\nExiting... bye!\n");
				break;
					
				default: System.out.println("\nChoice not recognized.\n");
					break;
			}
		}
	}
	
	
	/**
	 * Methode permettant d'ajouter des dossiers dans la banque de 
	 * dossiers
	 */
	public static void ajouterDossiers() {
		try {
			System.out.println("\nAjout d'un dossier dans la banque de dossiers");
			System.out.println("Rentrez les elements suivants:");
			BufferedReader br = new BufferedReader(new InputStreamReader(
					System.in));
			try {
				System.out.print("\nNom : ");
				String nom = br.readLine();
				System.out.print("\nPrenom : ");
				String prenom = br.readLine();
				System.out.print("\nNoPermis : ");
				String noPermis = br.readLine();
				System.out.print("\nNoPlaque : ");
				String noPlaque = br.readLine();
				_banqueDossiers.ajouterDossier(nom, prenom, noPermis, noPlaque);
			} catch (IOException err) {
				System.out.println("Error reading line");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Methode permettant d'ajouter des infractions dans la banque 
	 * d'infractions
	 */
	public static void ajouterInfractions() {
		try {
			System.out.println("Ajout d'une infraction dans la banque d'infractions");
			System.out.println("Rentrez les elements suivants:");
			BufferedReader br = new BufferedReader(new InputStreamReader(
					System.in));
			try {
				System.out.print("\ndescription : ");
				String desc = br.readLine();
				System.out.print("\nniveau : ");
				int niveau = Integer.parseInt(br.readLine());
				_banqueInfractions.ajouterInfraction(desc, niveau);
			} catch (IOException err) {
				System.out.println("Error reading line");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Methode permettant d'afficher la liste des dossiers compris 
	 * dans la banque de dossiers
	 */
	public static void visualiserDossiers() {
		CollectionDossier collectionDossiers = _banqueDossiers.dossiers();
		for (int i = 0; i < collectionDossiers.size(); i++) {
			System.out.println(collectionDossiers.getDossier(i)._toString());
		}		
	}
	
	/**
	 * Methode permettant d'afficher la liste des dossiers compris 
	 * dans la banque d'infractions
	 */
	public static void visualiserInfractions() {
		CollectionInfraction collectionInfractions = _banqueInfractions.infractions();
		for (int i = 0; i < collectionInfractions.size(); i++) {
			System.out.println(collectionInfractions.getInfraction(i)._toString());
		}		
	}
}
